This fixes a long standing bug in pid_get_parent on OpenBSD (which was mine
so... my fault). kp wasn't properly allocated and the function could return
random failures.
static GPid
pid_get_parent (GPid pid)
{
- struct kinfo_proc kp;
+ struct kinfo_proc *kp;
size_t len;
GPid ppid;
return (-1);
mib[5] = (len / sizeof(struct kinfo_proc));
- if (sysctl (mib, G_N_ELEMENTS (mib), &kp, &len, NULL, 0) < 0)
+ kp = g_malloc0 (len);
+
+ if (sysctl (mib, G_N_ELEMENTS (mib), kp, &len, NULL, 0) < 0)
return -1;
- ppid = kp.p_ppid;
+ ppid = kp->p_ppid;
+ g_free (kp);
return ppid;
}